package com.agencia.jsf;
import java.util.ArrayList;
import java.util.List;

import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlInputHidden;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import agencia.Hotel;
import agencia.persistencia.HotelDAO;
//import agencia.persistencia.HotelDAO;
	
public class AdministrarHotelesBean {
	
	private HtmlDataTable 		dataTable;
    private Hotel 				dataItem = new Hotel();
    private HtmlInputHidden 	dataItemId = new HtmlInputHidden();
	private List<Hotel> 		hoteles;
	private int 				cantidad = 0;
	private int 				proximoId= 1;
	
	public AdministrarHotelesBean() {
		cargar();
	}
	
	
	@SuppressWarnings("unused")
	private void cargar(){
		HotelDAO hotelDAO = new HotelDAO();
		
		hoteles = hotelDAO.findAll();
		
		/*hoteles = new ArrayList<Hotel>();
		
		Hotel hotel = new Hotel();
		hotel.setId(Long.valueOf(getProximoId()));
		hotel.setNombre("Hilton");
		hotel.setCategoria(5);
		hotel.setCiudad("Buenos Aires");
		hotel.setDireccion("Av. San Juan 3300");
		hotel.setPais("Argentina");
		hotel.setTelefono("001 402 777 7000");
		hoteles.add(hotel);*/
		
		

		cantidad = hoteles.size();
		actualizarProximoId();
		
		/* Levantaria de la BD todos los servicios cuyo idPadre = hotel.idPadre
		 * y tipoPadre = hotel.getTipoPadre y deberia agregarlos al hotel
		 */
		
		/* Levantaria de la BD todos las habitaciones cuyo idHotel = hotel.od
		 * y deberia agregarlos al hotel
		 * A cada habitacion hab.setPrecioBasico(hotel.getPrecioServicios());
		 */
		
	}
	
	public void actualizarProximoId(){
		proximoId++;		
	}
	
	public int getProximoId(){
		return proximoId;
	}
	
	public String crear() {
		dataItem = new Hotel();

		cantidad++;
		dataItemId.setValue(new Long(cantidad));
		
		return "editar";
	}

	public String editar() {
		// Obtengo la fila completa
	    dataItem = (Hotel) dataTable.getRowData();
	    dataItemId.setValue(dataItem.getId());
	
		return "editar";
	}
	private void persistirHotel(){
		HotelDAO hotelDAO = new HotelDAO();
		hotelDAO.getSession().beginTransaction().begin();
		hotelDAO.save(dataItem);
		hotelDAO.getSession().beginTransaction().commit();
	}
	public String guardar() {
		
		//dataItem.setId(Long.valueOf(dataItemId.getValue().toString()));
		if (cantidad > hoteles.size()){
			//dataItem.setId(Long.valueOf(getProximoId()));
			persistirHotel();
			hoteles.add(dataItem);
			actualizarProximoId();
		}
		
		//TODO guardar a DAO
		//DAO.guardar(dataItem);
		
		//servicios.add(dataItem);
		return "listar";
	}
	
	public String eliminar(){
		dataItem = (Hotel) dataTable.getRowData();
		eliminarHotel();
		hoteles.remove(dataItem);
		cantidad--;
		return "listar";
	}
	private void eliminarHotel(){
		HotelDAO hotelDAO = new HotelDAO();
		hotelDAO.getSession().beginTransaction().begin();
		hotelDAO.delete(hotelDAO.findById( dataItem.getId()));
		hotelDAO.getSession().beginTransaction().commit();
		
	}
	public String listar() {
		return null;
	}
	
	public String listarHabitaciones() {
		dataItem = (Hotel) dataTable.getRowData();
		
		FacesContext context = FacesContext.getCurrentInstance();		
		HttpServletRequest request= (HttpServletRequest)context.getExternalContext().getRequest();
		request.setAttribute("idHotel", dataItem.getId());		
		return "listarHabitaciones";
	}
	
	public String listarServicios() {
		dataItem = (Hotel) dataTable.getRowData();
		
		FacesContext context = FacesContext.getCurrentInstance();		
		HttpServletRequest request= (HttpServletRequest)context.getExternalContext().getRequest();
		request.getSession().setAttribute("idPadre", dataItem.getId());
		request.getSession().setAttribute("tipoPadre", dataItem.getTipoPadre());	
		request.getSession().setAttribute("accionTerminar", "terminarHotel");
		return "listarServicios";
	}

	public String volver() {
		/*FacesContext.getCurrentInstance().getApplication().getNavigationHandler()
			.handleNavigation(FacesContext.getCurrentInstance(),null,"volver");*/
			
		/*ExternalContext extCon = FacesContext.getCurrentInstance().getExternalContext();
		HttpSession session = (HttpSession) extCon.getSession(true);
		session.invalidate();*/
		
		// Si se creo uno nuevo, vuelvo el conteo hacia atras
		cantidad = hoteles.size();

		return "volver";
	}

	//-------------------------------------
	
	public HtmlDataTable getDataTable() {
		return dataTable;
	}

	public void setDataTable(HtmlDataTable dataTable) {
		this.dataTable = dataTable;
	}

	public Hotel getDataItem() {
		return dataItem;
	}

	public void setDataItem(Hotel dataItem) {
		this.dataItem = dataItem;
	}

	public HtmlInputHidden getDataItemId() {
		return dataItemId;
	}

	public void setDataItemId(HtmlInputHidden dataItemId) {
		this.dataItemId = dataItemId;
	}

	public int getCantidad() {
		return cantidad;
	}

	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}

	public List<Hotel> getHoteles() {
		return hoteles;
	}

	public void setHoteles(List<Hotel> hoteles) {
		this.hoteles = hoteles;
	}
}
